package s

import (
	"encoding/hex"
	"os"
)

type Bytes []byte

var (
	M_NEW    = 1
	M_APPEND = 0
)

func (b Bytes) ToFile(fname Str, mode ...int) error {

	m := M_APPEND

	if mode != nil {
		m = mode[0]
	}

	var f *os.File
	var err error

	if m == M_APPEND {
		f, err = os.OpenFile(fname.String(), os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm)
	} else {
		f, err = os.OpenFile(fname.String(), os.O_TRUNC|os.O_CREATE|os.O_WRONLY, os.ModePerm)
	}

	if err != nil {
		return err
	}

	_, err = f.Write(b)
	if err != nil {
		return err
	}
	return nil
}

func (b Bytes) Len() int {
	return len(b)
}

func (b Bytes) Decode() Str {
	S, err := AutoDecode(b)
	if err != nil {
		SafePushErr(err)
		return Str("")
	}
	return S
}

func (b Bytes) Bytes() []byte {
	return b
}

func (b Bytes) DecodeHex() Str {
	return Str(hex.EncodeToString(b))
}

func MakeBytes(len int) Bytes {
	b := make([]byte, len)
	return Bytes(b)
}
